/*
 * Copyright (C) 2015 yixun All Rights Reserved.
 *
 * PartnerInfoService.java
 */
package com.yixun.qfbao.service;

import com.yixun.common.page.Page;
import com.yixun.qfbao.model.PartnerInfo;
import com.yixun.qfbao.model.PartnerInfoAddition;
import com.yixun.qfbao.model.dto.PartnerInfoDto;

import java.util.List;
import java.util.Map;

/**
 * [文件名称]<br>
 * PartnerInfoService.java<br>
 * <br>
 * [文件描述]<br>
 * 合作机构 service interface<br>
 * <br>
 * [修改记录]<br>PartnerInfoService.java
 * 2015-10-13 15:32:11 创建 陶俊代码生成器<br>
 *
 * @author 陶俊代码生成器
 * @version 1.00
 */
public interface PartnerInfoService {
	/**
	 * @param entity 搜索条件
	 * @param begin 分页开始行数[不包含]
	 * @param end 分页结束行数[包含]
	 * @return 分页记录
	 */
	public Page<PartnerInfo> getPageModel(PartnerInfoDto entity,int begin,int end);
	/**
	 * @param entity 搜索条件
	 * @param begin 分页开始行数[不包含]
	 * @param end 分页结束行数[包含]
	 * @return 分页记录
	 */
	public Page<PartnerInfoDto> getDtoPageModel(PartnerInfoDto entity,int begin,int end);
	/**
	 * @param entity 搜索条件
	 * @param begin 分页开始行数[不包含]
	 * @param end 分页结束行数[包含]
	 * @return 分页记录
	 */
	public Page<PartnerInfoDto> getMyPageModel2(PartnerInfoDto entity,int begin,int end);
	/**
	 * @param entity 搜索条件
	 * @param begin 分页开始行数[不包含]
	 * @param end 分页结束行数[包含]
	 * @return 分页记录
	 */
	public Page<PartnerInfoDto> getPageModelByHigherid(PartnerInfoDto entity,int begin,int end);
	/**
	 * @param entity 搜索条件
	 * @param begin 分页开始行数[不包含]
	 * @param end 分页结束行数[包含]
	 * @return 分页记录
	 */
	public Page<PartnerInfo> getMyPageModel(PartnerInfoDto entity,int begin,int end);

	/**
	 * 查询列表
	 * @param entity 搜索条件
	 * @return 分页记录
	 */
	public List<PartnerInfo> selectListByDto(PartnerInfoDto entity);

	/**
	 * 查询列表
	 * @param entity 搜索条件
	 * @return 分页记录
	 */
	public List<PartnerInfo> selectWholeListByDto(PartnerInfoDto entity);

	/**
	 * 查询列表
	 * @param entity 搜索条件
	 * @return 分页记录
	 */
	 List<PartnerInfo> searchListByDto(PartnerInfoDto entity,int begin,int end);
	 
	 /**
	 *  获取审核列表总数量
	 * @param entity 搜索条件
	 * @return 分页记录
	 */
	 int countSearchCheckListByDto(PartnerInfoDto entity);
	 
	 /**
	 * 查询审核列表
	 * @param entity 搜索条件
	 * @return 分页记录
	 */
	 List<PartnerInfo> searchCheckListByDto(PartnerInfoDto entity,int begin,int end);
	/**
	 * 查询总数
	 * @param entity 搜索条件
	 * @return 分页记录
	 */
	 Integer searchListByDtoCount(PartnerInfoDto entity);
	 
	 /**
	  * 根据用户ID清空微信openId
	  * @param userId
	  * @return
	  */
	 public int clearOpenidByUserId(Long userId);
	 
	/**
	 * 查询列表
	 * @param entity 搜索条件
	 * @return 分页记录
	 */
	public List<PartnerInfo> selectMyListByDto(PartnerInfoDto entity,int begin,int end);

	/**
	 * 查询单个
	 * @param entity 搜索条件
	 * @return 分页记录
	 */
	public PartnerInfo selectByDto(PartnerInfoDto entity);
	/**
	 * 查询单个
	 * @param entity 搜索条件
	 * @return 分页记录
	 */
	public List<PartnerInfoDto> selectByDto2(PartnerInfoDto entity);/**
	 * 查询单个
	 * @param entity 搜索条件
	 * @return 分页记录
	 */
	public List<PartnerInfoDto> selectByDto3(PartnerInfoDto entity);

	/**
	 * @param id 根据主键搜索
	 * @return 一行记录
	 */
	public PartnerInfo selectById(Long id);
	
	/**
	 * 	根据分销的人员ID获取当前人员信息，会包含对应总代公司的companyUuid
	 * @param id 根据主键搜索
	 * @return 一行记录
	 */
	public PartnerInfo selectByAgencyId(Long id);

	/**
	 * @param entity 根据pojo搜索如果主键为空则返回它本身
	 * @return 一行记录或本身
	 */
	public PartnerInfo selectBy(PartnerInfo entity);

	/**
	 * @param entity 新增记录的详细信息
	 * @return 新增行数
	 */
	public PartnerInfoDto create(PartnerInfoDto entity);
	/**
	 * @param entity 更新记录的详细信息
	 * @return 更新行数
	 */
	public int update(PartnerInfoDto entity);
	/**
	 * @param entity 待删除的记录信息
	 * @return 删除行数
	 */
	public int destroy(PartnerInfoDto entity);
	/**
	 * @param entity 新增或更新
	 * @return 新增行数
	 */
	public int saveOrUpdate(PartnerInfoDto entity);
	/**
	 * 统计数量
	 * @param entity
	 * @return
	 */
	public int count(PartnerInfoDto entity);

	/**
	 * 查询列表
	 * @param entity 搜索条件
	 * @return 分页记录
	 */
	public List<PartnerInfo> logining(PartnerInfoDto entity);

	/**
	 * 根据域名 companyUuid 查询 总代 + 分销的ids
	 *
	 * @param domain
	 * @param companyUuid
	 * @return
	 */
	List<Long> listGroupCompanyId(String domain, String companyUuid);

	/**
	 * 根据companyId 查询 总代 + 分销的ids
	 *
	 * @param companyId
	 * @return
	 */
	List<Long> listGroupCompanyIdByCompanyId(Long companyId, boolean includeSelf);

	/**
	 * 手机号的重复校验
	 * 数据查询了 tm_partner_info 和 tm_partner_info_addition 两张表
	 * 返回列表可能存在同id的情况
	 *
	 * @param entity
	 * @return
	 */
	List<PartnerInfo> checkRepeat(PartnerInfoDto entity);

	/**
	 * 查询经纪人列表
	 * @param entity
	 * @return
	 */
	public List<PartnerInfoDto> selectAgentList(PartnerInfoDto entity);


	/**
	 * 绑定用户（含注册用户）
	 * @param dto
	 * @return
	 */
	Map<String,String> bindPartner(PartnerInfoDto dto,String companyUuid);

	/**
	 * 获取某个开发商已注册的用户
 	 * @param domain
 	 * @param phone
	 * @return
	 */
	List<PartnerInfo> getRegisterPartner(String domain,String phone,String companyUuid);

	/**
	 * 获取相应用户的用户信息
	 * @author sangtao
	 * @param domain
	 * @param phone
	 * @param systemId
	 * @return
	 */
	List<PartnerInfo> getRegisterPartner(String domain,String phone,String systemId,String companyUuid);

	/**
	 * 删除用户
 	 * @param info
	 * @return
	 */
	int deletePartnerInfo(PartnerInfo info);
	/**
	 * 根据部门id删除用户
	 *@author 作者：李晓进
	 *@date 2017年10月16日上午11:53:47
	 *@return
	 */
	int delPartnerByDeptId(Long deptId);

	/**
	 * @author sangtao
	 * @param partnerInfo
	 * @return
	 */
	boolean resetPasswordByValidate(PartnerInfoDto partnerInfo,String companyUuid);

	PartnerInfo checkPhoneByDomain(PartnerInfoDto partnerInfoDto,String companyUuid);
	/**
	 *
	 *@author xiaojin.li
	 *@date 2017年11月14日下午3:41:31
	 *@param userId 用户id
	 *@param oldPassword 老密码
	 *@param newPassword 新密码
	 *@param cofirmPassword 确认密码
	 *@return
	 */
	void updatePassword(Long userId,String oldPassword,String newPassword,String cofirmPassword) throws Exception;

	public Boolean changePartnerDept(Long id,Long deptId);

	/**
	 * 获取某个开发商已注册的用户
 	 * @param domain
 	 * @param phone
	 * @return
	 */
	List<PartnerInfo> getRegisterPartnerByCondition(String domain,String phone,String companyUuid);

	/**
	 * 根据经济公司查询已存在手机号
	 * @param phone
	 * @param agentCompany
	 * @return
	 */
	List<PartnerInfo> getRegisterPartnerByAgentCompany(String phone,Long agentCompany);

    List<PartnerInfoDto> selectStaffListByDto(PartnerInfoDto partnerInfoDto);

    List<PartnerInfoDto> selectPrincipalListByDto(PartnerInfoDto partnerInfoDto);

    /**
     * 获取楼盘指定分销机构的所有经纪人
     * @return
     */
    List<String> selectOpenIdByAssign(Long premiseId);

	/**
	 * 根据公司id
	 * @param companyIds
	 * @return
	 */
	List<String> getPartnersByCompanyIds(List<String> companyIds);

	/**
	 * 根据楼盘获取驻场人员
	 * @param premisesId
	 * @return
	 */
	List<String> getCaseMemberByPremises(Long premisesId);

	/**
	 * 获取分销商的管理员
	 * @param companyIds
	 * @return
	 */
	List<String> getPartnersAdminByCompanyIds(List<String> companyIds);

    /**
     * 获取代报备人openId
     * @param partnerId
     * @return
     */
    String getReplaceReporterOpenId(List<PartnerInfo> reveivePartnerInfos, Long partnerId);

    /**
     * 根据partner id 查询人员子表里面的手机号
     *
     * @param id
     * @return
     */
    List<PartnerInfoAddition> listPartnerInfoAddition(Long id);

    /**
     * 新增人员子表记录
     *
     * @param partnerInfoAddition
     */
    void addPartnerInfoAddition(PartnerInfoAddition partnerInfoAddition);

    /**
     * 新增人员子表记录 没有手机号
     *
     * @param partnerInfoAddition
     */
    void addPartnerInfoAdditionWithoutPhone(PartnerInfoAddition partnerInfoAddition);

    /**
     * 登录查询方法
     *
     * @param partnerInfoDto
     * @return
     */
    List<PartnerInfo> listPartnerInfoForLogin(PartnerInfoDto partnerInfoDto);

    /**
     * 登录查询方法
     *
     * @param partnerInfoDto
     * @return
     */
    PartnerInfo getPartnerInfoForLogin(PartnerInfoDto partnerInfoDto);

	/**
	 * 通过部门查找所有的人员列表
	 *
	 * @param deptIds
	 * @return
	 */
	List<PartnerInfoDto> listPartnerInfoByDeptIds(List<Long> deptIds);

	/**
	 * 通过部门查找所有的人员id列表
	 *
	 * @param deptIds
	 * @return
	 */
	List<Long> listPartnerInfoIdByDeptIds(List<Long> deptIds);

	void adminTransfer(PartnerInfoDto oldAdmin, PartnerInfoDto newAdmin) throws Exception;
	
	/**
	 *  设置管理员权限
	 * @param newAdmin
	 * @throws Exception
	 */
	String setAgencyAccountType(PartnerInfoDto partnerInfoDto);
	
	/**
	 *     根据员工ID查询员工名称+wxopenid + 公司，组别，部门信息
	 * @param staffIdList
	 * @return
	 */
	List<Map<String, Object>> getPartenerInfo(List<Object> staffIdList);
	
	/**
	 *   根据微信openId，判断是否要进行隐藏号码展示
	 * @param wxOpenIds
	 * @return
	 */
	List<String> getPhoneHideByOpenId(List<String> wxOpenIds);
	
	/**
	 *  根据员工的手机号以及公司UUID获取所有员工的信息
	 * @return
	 */
	List<Map<String, Object>> getAllPartnerInfoByPhoneAndCompany(Map<String, Object> phoneAndCompanyInfo);

	/**
	 *   根据微信openId，判断是否要进行隐藏号码展示
	 * @param wxOpenIds
	 * @return
	 */
	List<String> getHideAgentPhoneOpenIds(List<String> wxOpenIds);


	
}